#include <stdio.h>

struct Node{
	int data;
	Node* lch;
	Node* rch;
};
Node* createTree(int* pre,int* in,int n)
{
	if(n==0)
		return 0;
	Node* root=new Node;
	root->data=pre[0];
	root->lch=root->rch=0;
	
	int ind=0;
	while(in[ind]!=pre[0])
	{
		ind++;
	}
	int ln=ind;
	int rn=n-ind-1;
	
	root->lch=createTree(pre+1,in,ln);
	root->rch=createTree(pre+1+ln,in+1+ln,rn);
	
	return root;
}
void printTree(Node* root)
{
	if(root!=0)
	{
		printf("%d",root->data);
		printf("(");
		printTree(root->lch);
		printf(",");
		printTree(root->rch);
		printf(")");
	}
}
void getMax(Node* root,int &dep,int &len)
{
	if(root==0)
	{
		dep=-1;
		len=0;
		return;
	}
	int ld,ll,rd,rl;
	getMax(root->lch,ld,ll);
	getMax(root->rch,rd,rl);
	dep=(ld>rd)?ld+1:rd+1;
	
	len=(ll>rl)?ll:rl;
	if(ld+rd+2>len)
		len=ld+rd+2;
	
}
int main()
{
	int A[]={1,2,3,4,5,6,7};
	int B[]={2,3,1,5,4,7,6};
	Node* root=createTree(A,B,7);
	printTree(root);
	
	int dep,len;
	getMax(root,dep,len);
	printf("%d %d\n",dep,len);
}
